home *** CD-ROM | disk | FTP | other *** search
- /* File "platform.c", Light Sockets - Copyright (C) Matt Slot, 1996 */
- /* Platform specific utilities for registering and selecting network stacks. */
-
- #include "stddebug.h"
- #include "stdtypes.h"
-
- #include "platform.h"
- #include "socket.h"
-
- #if defined(PLATFORM_MAC)
- #include "my mactcp.h"
- #elif defined(PLATFORM_UNIX)
- #include "bsdsocks.h"
- #endif
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- SocketResult SelectNetworkStack(SocketRef socket, NetworkStackRef &stack) {
- SInt32 error = eSocketNoError;
-
- /* Parameter validation */
- qThrowIfNull(socket, eSocketErrBadParam, kSocketErrBadParamStr);
-
- stack = 0;
-
- switch(qGetSocketProtocol(socket->GetSocketType())) {
- case eSocketProtocolTCPIP:
- #if defined(PLATFORM_MAC)
- qThrowIfNull(stack = new MacTCPStack(socket), eSocketErrOutOfMem,
- kSocketErrOutOfMemStr);
- #elif defined(PLATFORM_UNIX)
- qThrowIfNull(stack = new BSDSocketStack(socket), eSocketErrOutOfMem,
- kSocketErrOutOfMemStr);
- #endif
- break;
-
- case eSocketProtocolATalk:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- case eSocketProtocolIPX:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- case eSocketProtocolRPC:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- case eSocketProtocolFile:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- default:
- qThrowErr(eSocketErrBadParam, kSocketErrBadParamStr);
- break;
- }
-
- /* CATCH */
- qCatch();
- return(error);
- }
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- SocketResult ResolveNetworkAddress(SocketType suggType, Char8 *textAddress,
- SocketAddressPtr socketAddress) {
- SInt32 error = eSocketNoError;
-
- /* Parameter validation */
- qThrowIfNull(socketAddress, eSocketErrBadParam, kSocketErrBadParamStr);
- qThrowIfNull(textAddress, eSocketErrBadParam, kSocketErrBadParamStr);
-
- socketAddress->type = eSocketUninitialized;
- socketAddress->length = 0;
-
- switch(qGetSocketProtocol(suggType)) {
- case eSocketProtocolTCPIP: {
- NetworkStack *stack = 0;
- Bool8 loaded = false;
-
- #if defined(PLATFORM_MAC)
- if (stack = new MacTCPStack(0))
- #elif defined(PLATFORM_UNIX)
- if (stack = new BSDSocketStack(0))
- #else
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- #endif
- {
- qTraceIfError(stack->DoLoad(), 0);
-
- if (!error) {
- qTraceIfError(stack->DoAddressResolve(textAddress,
- socketAddress), 0);
- qTraceIfError(stack->DoUnload(), 0);
- }
-
- socketAddress->type = suggType;
- delete stack;
- }
- }
- break;
-
- case eSocketProtocolATalk:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- case eSocketProtocolIPX:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- case eSocketProtocolRPC:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- case eSocketProtocolFile:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- default:
- qThrowErr(eSocketErrBadParam, kSocketErrBadParamStr);
- break;
- }
-
-
- /* CATCH */
- qCatch();
-
- if (error) {
- socketAddress->type = eSocketUninitialized;
- socketAddress->length = 0;
- }
-
- return(error);
- }
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- SocketResult LookupNetworkAddress(SocketAddressPtr socketAddress,
- Char8 *textAddress) {
- SInt32 error = eSocketNoError;
-
- /* Parameter validation */
- qThrowIfNull(socketAddress, eSocketErrBadParam, kSocketErrBadParamStr);
- qThrowIfNull(textAddress, eSocketErrBadParam, kSocketErrBadParamStr);
-
- *textAddress = 0;
-
- switch(qGetSocketProtocol(socketAddress->type)) {
- case eSocketProtocolTCPIP: {
- NetworkStack *stack = 0;
- Bool8 loaded = false;
-
- #if defined(PLATFORM_MAC)
- if (stack = new MacTCPStack(0))
- #elif defined(PLATFORM_UNIX)
- if (stack = new BSDSocketStack(0))
- #else
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- #endif
- {
- qTraceIfError(stack->DoLoad(), 0);
-
- if (!error) {
- qTraceIfError(stack->DoAddressLookup(socketAddress,
- textAddress), 0);
- qTraceIfError(stack->DoUnload(), 0);
- }
- delete stack;
- }
- }
- break;
-
- case eSocketProtocolATalk:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- case eSocketProtocolIPX:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- case eSocketProtocolRPC:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- case eSocketProtocolFile:
- qThrowErr(eSocketErrNoSupport, kSocketErrNoSupportStr);
- break;
-
- default:
- qThrowErr(eSocketErrBadParam, kSocketErrBadParamStr);
- break;
- }
-
-
- /* CATCH */
- qCatch();
-
- if (error)
- *textAddress = 0;
-
- return(error);
- }
-